#include "camerawindow.h"
#include "ui_camerawindow.h"
#include "previewwindow.h"
#include <QTime>
#include <QString>
#include <QDebug>
#include <QDir>
CameraWindow::CameraWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::CameraWindow)
{
    ui->setupUi(this);
    show_back_gif();

    v4l2 = nullptr;

    m_timer = new QTimer;
    connect(m_timer,&QTimer::timeout,this,&CameraWindow::onUpdateUIData);
    Date_Time_timer = new QTimer;
    connect(Date_Time_timer,&QTimer::timeout,this,&CameraWindow::onUpdateUIDataTime);
    Date_Time_timer->start(1000);
}

CameraWindow::~CameraWindow()
{
    delete ui;
}

//定时器响应函数--显示摄像头开启时的画面
void CameraWindow::onUpdateUIData()
{
    char buffer[640*480*3] = {0};
    char rgbbuffer[640*480*3] = {0};
    //1、采集yuyv的数据
    v4l2->get_frame(buffer);

    //2、将 采集到的yuyv格式的数据buffer转换成rgb格式
    v4l2->yuv422torgb24((unsigned char *)buffer,(unsigned char *)rgbbuffer,640,480);

    //3、显示 ---- 图像源数据 rgbbuffer  到UI 控件
    QImage image = QImage((unsigned char *)rgbbuffer,640,480,QImage::Format_RGB888);
    QPixmap pic = QPixmap::fromImage(image);

    pic = pic.scaled(ui->label->size());
    ui->label->setPixmap(pic);

    saveImage = image;
}

//定时器响应函数--显示实时时间
void CameraWindow::onUpdateUIDataTime()
{
    //显示实时时间
    ui->dateTimeEdit->setDateTime(QDateTime::currentDateTime());
}

//显示动态背景图
void CameraWindow::show_back_gif()
{
    QMovie *movepic = new QMovie(QString::fromLocal8Bit(":/new/prefix1/back.gif"));
    movepic->setScaledSize(ui->backGif->size());
    ui->backGif->setMovie(movepic);
    movepic->start();
}

//启动或关闭摄像头--切换按键的状态
void CameraWindow::on_start_or_stop_btn_clicked()
{
//    static int flag = 0;
    if(flag == 0)//开始播放
    {
        ui->start_or_stop_btn->setStyleSheet("border-image: url(:/new/prefix1/stop.png);");
        flag = 1;
        //开始
        if(v4l2 == nullptr){
            v4l2 = new V4l2Api("/dev/video7");
        }
        v4l2->start();//启动摄像头
        m_timer->start(100); //启动定时器
    }
    else//停止播放
    {
        ui->start_or_stop_btn->setStyleSheet("border-image: url(:/new/prefix1/start.png);");
        flag = 0;
        // 暂停
        m_timer->stop();

        if(v4l2 != nullptr){
            v4l2->stop();
            v4l2->destory();
            delete  v4l2;
            v4l2 = nullptr;
        }
    }
}

//返回上个界面--功能界面--清空摄像头拍摄的图片
void CameraWindow::on_return_btn_clicked()
{
    //因为在跳转时，记录了上一个界面
    //所以可以利用此函数获取当前窗口的父窗口对象指针
    QWidget *parent = this->parentWidget();

    parent->show();//把之前父界面的隐藏状态改为显示状态，显示父界面
    //关闭摄像头
    // 暂停
    m_timer->stop();

    if(v4l2 != nullptr){
        v4l2->stop();
        v4l2->destory();
        delete  v4l2;
        v4l2 = nullptr;
    }
    //打开pic目录--先创建pic目录
    QDir dir("/even/pic"); //打开目录
    dir.setFilter(QDir::Files);
    //将目录下所有的文件信息存储到该容器中
    QFileInfoList fileList = dir.entryInfoList(); //将目录里面所有的bmp照片添加到链表中

    for(int i=0; i<fileList.size() ;i++){
         qDebug()<<fileList.at(i).filePath(); //打印图片的路径名字
         QFile::remove(fileList.at(i).filePath());
    }
    this->close();//关闭当前界面
}

//抓拍--根据当前时间设置图片的保存名--以及保存路径
void CameraWindow::on_photograph_btn_clicked()
{
    /*
         将你抓拍的照片按照名字存储
         saveImage.save("1.bmp");
    */
    //获取当前的时间
    QString curTime = QTime::currentTime().toString("hh:mm:ss");
    qDebug()<<"time:"<<QTime::currentTime().toString("hh:mm:ss");
    QString fileName = QString("./pic/%1.bmp").arg(curTime);
    //fileName 把: 去掉
    fileName = fileName.remove(':');
    qDebug()<<"fileName:"<<fileName;
    //preview -->就是捕捉到的画面
    saveImage.save(fileName);  //将视频采集的yuv的格式转换为bmp的格式
}

//切换预览摄像头拍照的图片界面
void CameraWindow::on_preview_btn_clicked()
{
    //获取子窗口的对象(widget的this指针传过去 用来返回)
    PreviewWindow *picWindow = new PreviewWindow(this);
    //设置它自动关闭的属性
    picWindow->setAttribute(Qt::WA_DeleteOnClose);
    //显示子窗口
    picWindow->show();
    //隐藏当前窗口
    this->hide();
}
